Shader "Custom/CircleRipple"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,0,1) // 暖黄色
        _Center ("Center", Vector) = (0.5, 0.5, 0, 0) // 光圈中心
        _Radius ("Radius", Float) = 0.0 // 光圈半径
        _Thickness ("Thickness", Float) = 0.05 // 光圈宽度（整体）
        _FadeWidth ("Fade Width", Float) = 0.05 // 羽化宽度（内侧渐变范围）
        _Falloff ("Falloff", Float) = 1.5 // 控制羽化快速下降然后缓慢结束的速度
    }

    SubShader
    {
        Tags { "Queue" = "Overlay" }
        Pass
        {
            ZTest Always
            ZWrite Off
            Cull Off
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            float4 _Color;
            float4 _Center;
            float _Radius;
            float _Thickness;
            float _FadeWidth;
            float _Falloff;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                float2 dist = i.uv - _Center.xy;
                float len = length(dist);

                // 光圈实际的可见区域
                float inner = _Radius;
                float outer = _Radius + _Thickness;

                // 使用指数衰减实现快速下降然后缓慢结束
                float fadeInner = smoothstep(inner - _FadeWidth, inner, len);

                // 使用 pow 函数来增加衰减速率：较小的 _Falloff 值让曲线更加缓慢
                fadeInner = pow(fadeInner, _Falloff); 

                // 透明度计算：光圈内羽化，光圈外部直接透明
                float alpha = fadeInner * (len <= outer ? 1.0 : 0.0);

                return float4(_Color.rgb, _Color.a * alpha);
            }
            ENDCG
        }
    }
}
